Модульное программирование в Mathcad

                Общая идея модульного программирования состоит в следующем:

·       реализации вычислительных процессов в виде отдельных программных единиц - модулей;

·       обращении к этим модулям в других программах с передачей данных, необходимых для вычислительного процесса.

                Модульное программирование позволяет уменьшить объем исходных текстов программ, сделать их более читаемыми, ускорить написание и тестирование программ, уменьшить расходы на сопровождение (эксплуатацию) программ.

                Модульное программирование в пакете Mathcad можно реализовать двумя методами :

·       модульное программирование в пределах одного документа Mathcad;

·       модульное программирование в нескольких документах Mathcad.

Модульное  программирование  в  одном документе

                Этот метод характеризуется тем, что:

·       для реализации простых вычислений используются локальные функций, а более сложные - программы - функции;

·       описание локальных функций, программ-функций и их вызов (т.е. обращение к ним) находятся в пределах одного документа и хранятся в одном файле. При этом часто внутри одной программы-функции находится вызовы локальных функций, встроенных функций Mathcad и другой программы-функции.

                Пример. Реализуем в виде программы-функции вычисление определенного интеграла   вида

используя формулу Симпсона с автоматическим выбором числа узлов. При этом программа-функция Simpson(f,a,b,N) вычисляет определенный интеграл по формуле Симпсона при фиксированном числе интервалов N, а программа-функция Adapt(f,a,b) выбирает по заданной точности вычисления интеграла (равной 10-8 ) количество интервалов.

 

 

               

Используя эти программы - функции вычислим определенный интеграл от функции  f(x) = x2  на отрезке [0,1]. Точное значение интеграла равно 1/3=0.33333333333333... Обращение к программе-функции Adapt дает результат

Перед обращением  к программе-функции Adapt необходимо описать функцию пользователя f(x) в виде

                                         f(x) : = x2,

так как имя функции f(x) используется в качестве фактического параметра.

Модульное программирование в нескольких документах Mathcad

В предыдущем способе реализации модульного программирования описание модулей (функций пользователя и программ-функций) и их вызов находится в одном документе. Такой способ имеет ряд недостатков:

· невозможность  параллельной разработки программ несколькими разработчиками;

· невозможность  "автономной" отладки  программ-функций и их модификации  в процессе эксплуатации программного обеспечения;

· невозможность использования  разработанной программы-функции в нескольких документах без дублирования описания программы-функции.

Выноска 3:  Значок оператора
         Reference
Для преодоления этих недостатков  описание программы-функции выполняют в одном документе MathCAD, а  ее вызов размещается в другом документе (этот прием широко используется в современных алгоритмических языках высокого уровня). Однако при этом возникает вопрос: как при вызове программы-функции в одном документе "присоединить" файл с другим документом MathCAD, в котором находится описание вызываемой программы-функции? Для такого присоединения служит специальный оператор Reference, который записывается в виде, показанном на рис.

Выноска 3:   Полное имя файла, в котором находится
       документ, содержащий описание 
       вызываемой программы-функции

 

 

 

 

 

                                    Рис. Структура  оператора  Reference

                Оператор Reference вставляется в текст документа, в котором вызывается программа-функция перед ее вызовом. Для вставки этого оператора необходимо выполнить следующие шаги:

 

                Шаг 1. Щелкнуть левой кнопкой мыши в том месте, куда будет вставлен оператор Reference.

                Шаг 2.  Обратиться к пункту меню  Insert  и выполнить команду Reference.

                Шаг 3. В поле ввода появившегося диалогового окна ввести полное имя файла, содержащего документ с описанием вызываемой функции. Для задания имени можно щелкнуть кнопку Browse и в появившемся диалоговом окне указать диск, папку и имя файла ( в поле ввода отразится полное имя файла).

                Шаг 4. После выполненных установок щелкнуть кнопку  OK

                После выполнения этих шагов в документе появится оператор Reference.

                Таким образом реализация модульного программирования в нескольких документах МаthCAD включает следующие этапы (которые будем иллюстрировать на примере вычисления определенного интеграла с использованием программ-функций примера) :

·       Описание в документе МаthCAD необходимых программ-функций и сохранение этого документа в файле в нужной папке и под нужном именем (в нашем примере документ будет включать описание двух программ-функций Simpson и Adapt и документ будет сохранен на диске D: в папке MathCad_Apll в файле под именем Adapt_Integration.mcd).

·       Вставка оператора Reference в документе, в котором вызываются описанные программ-функций путем выполнения шагов 1 - 4. В нашем примере вставленный оператор Reference будет иметь вид:

·       Вызов нужных программ-функций. В нашем примере вызов может сметь следующий вид:

Выноска 3:  Точное значение интеграла
    0.3333333333333333333..

Выноска 3:  Точное значение интеграла    - 1.00000000000000

                В заключении заметим, что описанная реализация модульного программирования позволяет создавать библиотеки программ-функций, реализующие вычислительные алгоритмы различной сложности для различных предметных областей и использовать библиотеки программы-функции, разработанные другими пользователями.

Рекурсивные вычисления. Рекурсия является одним из мощных способов программирования и заключается в определение  функции через саму себя. Рекурсивное определение функции должно состоять из двух частей: начального определения и определения функции в терминах предыдущего значения функции. Эти два этапа хорошо иллюстрируются на примере вычисления факториала целого числа в следующем фрагменте:

Задания:

1.      Даны натуральные числа n, m, целые числа a1,...,an, b1,...,bm,c1,...,c30. Получить

2.      Дано действительное положительное число . Методом итераций решить систему линейных алгебраических уравнений с точностью . В данной задаче вычисление с точностью  означает следующее. Вычисляется последовательность векторов приближений x(m)=(x1(m),x2(m),…,xn(m)), где n—число неизвестных системы, m=0,1,2,... Если для некоторого k выполнено условие

, i=1, 2, ..., n, то вектор x(k) – решение системы уравнений.

x1=2-0.06x2+0.02x3 ,

x2=3-0.03x1+0.05x3 ,

x3=5-0.01x1+0.02x2 ;

3.      Дано действительное положительное число . Вычислить с точностью   площадь фигуры между дугами двух кривых:

y=sinx2+2, y=ex;

         Воспользоваться численными методами решения уравнений и интегрирования.

4.      Даны целые числа a1,…,an. Для каждого из чисел, входящих в последовательность a1,…,an, выяснить, сколько раз оно входит в эту последовательность. Результат представить в виде ряда строк, первая из которых есть a—k, где k—число вхождений a1 последовательность a1,…,an. Вторая строка будет иметь вид ai—ki, где ai—первый по порядку член последовательности, отличный от a1, а ki—число вхождений этого члена в последовательность.

5.      Даны натуральное число n, целые числа  a1, ... a25, b1,...bn.        Среди a1, ..., a25 нет повторяющихся чисел, нет их и среди b1,..,bn. Верно ли, что все члены последовательности a1,…,a25 входят в последовательность b1,…,bn  и  при этом a1 встречается в последовательности b1,…,bn не позднее, чем a2, a2—не позднее, чем a3, и т. д.?

6.      Последовательность чисел Фибоначчи u0, u1, u2,.. образуется по закону u0=0; u1=l; ui=ui-1+ui-2 (i=2,3, ...).

Последовательность f0, f1, ... образуется по закону f0=0; f1=1; fi=fi-1+fi-2+ui-2  (i=2,3, .. ). Дано натуральное n > 1. Получить f0, f1, .. , fn.